﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CROSLAND.BL.BE;
using System.Data;
using CroslandSAP.Proxy;

namespace CROSLAND.DL.DALC.SAPC
{
    public class CierreDALC : ICierreDALC
    {
       public static CierreDALC Instance() {
            if (_instance == null)
            {
                lock (typeof(CierreDALC))
                {
                    if (_instance == null)
                    {
                        _instance = new CierreDALC();
                    }
                }
            }
            return _instance;
        }

       private CierreDALC() { }
       private static volatile CierreDALC _instance = null;

       public void Set_Cierre(string p_sociedad, string p_caja, DateTime p_fecha, string p_usuario, List<CierreBE> p_tcierre, 
                              out string ex_result , out string ex_tipo )
        {
            PedidosProxy proxy = new PedidosProxy();
            proxy.Connection = DALC.getConnection;
            if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
            /* llamando a la función */

            ZSVMC_CIERRETable tblCierre = new ZSVMC_CIERRETable();

            DataTable dt = tblCierre.ToADODataTable(); 
            foreach (CierreBE item in p_tcierre)
            {
                ZSVMC_CIERRE dr = new ZSVMC_CIERRE();
                dr.Moneda = item.Moneda;
                dr.Monto = item.Monto;
                dr.Tipo = item.Tipo;
                tblCierre.Add(dr);
            }
                     
            proxy.Zvmc_Sd_044(p_sociedad, p_caja, ParametroDALC.dateNetToSap(p_fecha), p_usuario, out ex_result, out ex_tipo, ref tblCierre);
//(string Pi_Bukrs, string Pi_Caja, string Pi_Fecha, string Pi_Usuario, out string Pe_Mensaje, out string Pe_Tipo, ref CroslandSAP.Proxy.ZSVMC_CIERRETable Pi_Tcierre)
            SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
            proxy.Connection = null;
            /* Manejando el retorno */

        }


       public void Get_TieneCierre( string p_caja, DateTime p_fecha, out string ex_tipo)
       {
           PedidosProxy proxy = new PedidosProxy();
           proxy.Connection = DALC.getConnection;
           if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
           /* llamando a la función */

           proxy.Zvmc_Sd_046(p_caja, ParametroDALC.dateNetToSap(p_fecha),out ex_tipo);
           //(string Pi_Bukrs, string Pi_Caja, string Pi_Fecha, string Pi_Usuario, out string Pe_Mensaje, out string Pe_Tipo, ref CroslandSAP.Proxy.ZSVMC_CIERRETable Pi_Tcierre)
           SAP.Connector.SAPConnectionPool.ReturnConnection(proxy.Connection);
           proxy.Connection = null;
           /* Manejando el retorno */

       }

       public void Get_RepCierre(string p_sociedad, string p_caja, DateTime p_fecha, string p_oficina , string p_usuario,
                              out List<ResumenVentaBE> p_tresumen, out List<DetalleVentaBE> p_tdet)
       {
           p_tresumen = new List<ResumenVentaBE>();
           p_tdet = new List<DetalleVentaBE>();

           PedidosProxy proxy = new PedidosProxy();
           proxy.Connection = DALC.getConnection;
           if (!proxy.Connection.IsOpen) { proxy.Connection.Open(); }
           /* llamando a la función */
           ZSSD_GENERALTable lt_detalle = new ZSSD_GENERALTable();
           ZSSD_GENERALTable lt_res = new ZSSD_GENERALTable();
           proxy.Zvmc_Sd_048(p_sociedad, ParametroDALC.dateNetToSap( p_fecha ), p_oficina, p_caja, ref lt_detalle, ref lt_res);
           DataTable dt = lt_detalle.ToADODataTable();
           DetalleVentaBE rdet = null;
           ResumenVentaBE rres = null;

           int count = 1;
           foreach (DataRow dr in dt.Rows)
           {
               rdet = new DetalleVentaBE();
               rdet.Caja = p_caja;
               rdet.Cajero = p_usuario;
               rdet.Cliente = dr["VALOR3"].ToString();
               rdet.Dolares = Convert.ToDecimal( dr["NUMERO2"].ToString() );
               rdet.Fecha = p_fecha;
               rdet.MedioPago = dr["VALOR4"].ToString();
               rdet.NroCompPago = dr["VALOR2"].ToString();
               rdet.Pagina = "1";
               rdet.Sede = p_oficina;
               rdet.Sociedad = p_sociedad;
               rdet.Soles = Convert.ToDecimal( dr["NUMERO1"].ToString());
               rdet.TipoCancelacion = dr["VALOR1"].ToString();
               rdet.TipoDocumento = dr["VALOR5"].ToString();     
               rdet.Turno = "1";
               rdet.Contador = count;
               count++;

               p_tdet.Add(rdet);
           }

           dt = lt_res.ToADODataTable();

           foreach (DataRow dr in dt.Rows)
           {
               rres = new ResumenVentaBE();

               rres.Caja = p_caja;
               rres.Cajero = p_usuario;
               rres.CantidadItems = Convert.ToInt16( dr["VALOR3"].ToString() );
               rres.Dolares =  Convert.ToDecimal( dr["NUMERO2"].ToString() );
               rres.Fecha = p_fecha;
               rres.Item = dr["VALOR1"].ToString();
               rres.Pagina =  "1";
               rres.Sede = p_oficina;
               rres.Sociedad = p_sociedad;
               rres.Soles =  Convert.ToDecimal( dr["NUMERO1"].ToString() );
               rres.TipoCancelacion =  dr["VALOR2"].ToString();
               rres.Turno = "1";

               p_tresumen.Add(rres);
           }
       }
    }
}
